/**
 * 国际化工具
 * 前端默认语言：日语（ja）
 * 支持语言：日语（ja）、中文（zh-CN）、英语（en）
 */

import ja from './locales/ja.js'
import zhCN from './locales/zh-CN.js'
import en from './locales/en.js'

const messages = {
  'ja': ja,
  'zh-CN': zhCN,
  'en': en
}

// 默认语言：日语
const defaultLocale = 'ja'

// 获取当前语言
function getLocale() {
  try {
    const saved = uni.getStorageSync('locale')
    return saved || defaultLocale
  } catch (e) {
    return defaultLocale
  }
}

// 设置语言
function setLocale(locale) {
  try {
    uni.setStorageSync('locale', locale)
    return true
  } catch (e) {
    console.error('设置语言失败', e)
    return false
  }
}

// 翻译函数
function t(key, params = {}) {
  const locale = getLocale()
  const keys = key.split('.')
  let value = messages[locale]
  
  for (const k of keys) {
    if (value && typeof value === 'object') {
      value = value[k]
    } else {
      // 如果当前语言没有找到，尝试使用默认语言
      if (locale !== defaultLocale) {
        value = messages[defaultLocale]
        for (const k2 of keys) {
          if (value && typeof value === 'object') {
            value = value[k2]
          } else {
            return key // 返回key作为fallback
          }
        }
      } else {
        return key // 返回key作为fallback
      }
    }
  }
  
  // 替换参数
  if (typeof value === 'string' && Object.keys(params).length > 0) {
    return value.replace(/\{\{(\w+)\}\}/g, (match, key) => {
      return params[key] !== undefined ? params[key] : match
    })
  }
  
  return value || key
}

// Vue插件安装
function install(Vue) {
  Vue.prototype.$t = t
  Vue.prototype.$locale = {
    get: getLocale,
    set: setLocale,
    t: t
  }
  
  // 全局混入，提供计算属性
  Vue.mixin({
    computed: {
      $i18n() {
        return {
          locale: getLocale(),
          t: t
        }
      }
    }
  })
}

export default {
  install,
  t,
  getLocale,
  setLocale,
  messages
}

